// 消息合并工具类
class MessageMerger {
  constructor() {
    this.messageIdSet = new Set(); // 已存在的消息ID集合
  }
  
  // 合并新消息到现有消息列表
  mergeMessages(existingMessages, newMessages) {
    const mergedMessages = [...existingMessages];
    const addedMessages = [];
    
    for (const newMessage of newMessages) {
      // 检查消息是否已存在
      if (!this.messageIdSet.has(newMessage.id)) {
        // 找到插入位置（按时间排序）
        const insertIndex = this.findInsertPosition(mergedMessages, newMessage);
        
        if (insertIndex === mergedMessages.length) {
          // 添加到末尾
          mergedMessages.push(newMessage);
        } else {
          // 插入到中间
          mergedMessages.splice(insertIndex, 0, newMessage);
        }
        
        this.messageIdSet.add(newMessage.id);
        addedMessages.push(newMessage);
      }
    }
    
    return {
      mergedMessages,
      addedMessages,
      hasNewMessages: addedMessages.length > 0
    };
  }
  
  // 找到消息插入位置
  findInsertPosition(messages, newMessage) {
    const newTime = new Date(newMessage.createTime).getTime();
    
    for (let i = 0; i < messages.length; i++) {
      const existingTime = new Date(messages[i].createTime).getTime();
      if (newTime <= existingTime) {
        return i;
      }
    }
    
    return messages.length;
  }
  
  // 初始化消息ID集合
  initMessageIds(messages) {
    this.messageIdSet.clear();
    messages.forEach(msg => this.messageIdSet.add(msg.id));
  }
  
  // 检查是否有新消息
  hasNewMessages(newMessages) {
    return newMessages.some(msg => !this.messageIdSet.has(msg.id));
  }
}

export default MessageMerger;
